package com.evildog.workspace.invest.application.convert;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.evildog.workspace.common.result.PagedResult;
import com.evildog.workspace.invest.application.bo.BillReportBO;
import com.evildog.workspace.invest.application.bo.BillReportListBO;
import com.evildog.workspace.invest.application.bo.BillReportPageBO;
import com.evildog.workspace.invest.application.bo.BillReportStatBO;
import com.evildog.workspace.invest.application.dto.BillReportDTO;
import com.evildog.workspace.invest.application.dto.BillReportListDTO;
import com.evildog.workspace.invest.application.dto.BillReportPageDTO;
import com.evildog.workspace.invest.application.entity.BillReport;
import com.evildog.workspace.invest.application.entity.BillReportListDO;
import com.evildog.workspace.invest.application.entity.BillReportPageDO;
import com.evildog.workspace.invest.application.model.BillReportListParam;
import com.evildog.workspace.invest.application.model.BillReportPageParam;
import com.evildog.workspace.invest.application.model.BillReportParam;
import com.evildog.workspace.invest.application.vo.BillReportListVO;
import com.evildog.workspace.invest.application.vo.BillReportPageVO;
import com.evildog.workspace.invest.application.vo.BillReportVO;
import com.evildog.workspace.invest.application.vo.BillReportYearStatVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

import java.util.List;

@Mapper
public interface BillReportConvert {

    BillReportConvert INSTANCE = Mappers.getMapper(BillReportConvert.class);

    BillReportPageDTO convert(BillReportPageParam billReportPageParam);

    BillReportListDTO convert(BillReportListParam billReportListParam);

    BillReportDTO convert(BillReportParam billReportParam);

    @Mapping(target = "isDeleted", ignore = true)
    BillReport convert(BillReportDTO billReportDTO);

    BillReportPageDO convert(BillReportPageDTO billReportPageDTO);

    BillReportVO convert(BillReportBO billReportBO);

    BillReportBO convert(BillReport billReport);

    List<BillReportListBO> convert(List<BillReportListDO> billReportList);

    List<BillReportListVO> convertVoList(List<BillReportListBO> billReportListBO);

    @Mappings({})
    PagedResult<BillReportPageBO> convert(IPage<BillReportPageDO> page);

    PagedResult<BillReportPageVO> convert(PagedResult<BillReportPageBO> page);

    BillReportYearStatVO convert(BillReportStatBO billReportListBO);
}